<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>

        /*
            Promise 默认返回一个成功状态 即执行成功回调
            即使当前是失败回调，若没有声明下一个then的状态（resolve、reject），则是resolve状态
            所以一般的 catch捕获错误信息一般都放在最后 不然毫无意义 （后面还有then的话依然继续执行）
            catch 也不会和 reject 函数一起使用  (一同使用将执行reject函数)
        */

        let res1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                console.log('a')
                resolve()
            }, Math.random() * 1000);
        }).then(res => {
            console.log('resolve 成功回调函数')
            return 'res1的数据'
        }, err => {
            console.log('reject 失败回调函数')
        })
        //  a     resolve 成功回调函数

        let res2 = new Promise((resolve, reject) => {
            setTimeout(() => {
                console.log('b')
                resolve()
            }, Math.random() * 1000);
        }).then(res => {
            return Promise.reject('错误信息') // 走catch
        }).then(res => {
            console.log('不执行')
        }).catch(e => {
            console.log(e)
            return 'res2的数据'
        })
        // b   错误信息



        // 当多个异步都执行完毕后的操作,Promise.all([promise对象]).then(value=>{}) value:Promise对象返回的数据 是一个对应的数组
        Promise.all([res1, res2]).then(value => {
            console.log(value)
        })

        // 当某个异步执行完成后立即执行的操作  Promise.race([promise对象]).then(value=>{}) value:最先执行完Promise函数返回的数据
        Promise.race([res1, res2]).then(value => {
            console.log(value)
        })

    </script>
</body>

</html>